package modelo;

public class RKdos {

	private double temperaturaInterior = 154.833;
	
	private double radioInterior = 117.475;
	
	private double radioExterior = 142.875;
	
	
	public double rkdos(double N, double Vinicial){
		
		double h = (this.radioExterior - this.radioInterior) / N;
		
		double radio = this.radioInterior;
		
		double temperatura = this.temperaturaInterior;
		
		this.imprimirResultado(radio, temperatura);
		
		double v = Vinicial;
		
		for(int iteracion = 1; iteracion <= N; iteracion++){
			
			radio = this.radioInterior + h * iteracion;
			
			double Q1u = h * v;
			
			double Q1v = h * (-v / radio);
			
			double Q2u = h * (v + Q1v);
			
			double Q2v = h * (-v-Q1v) / (this.radioInterior + h * (iteracion + 1));
			
			temperatura = temperatura + 0.5 * (Q1u + Q2u);
			
			this.imprimirResultado(radio, temperatura);
			
			v = v + 0.5 * (Q1v+ Q2v);
		}

		return temperatura;
	}
	
	private void imprimirResultado(double radio, double temperatura) {
		
		Operaciones op = new Operaciones();
		
		double valorReal = op.valorReal(radio);
		
		double errorAbsoluto = op.errorAbsoluto(valorReal, temperatura);
		
		double errorRelativo = op.errorRelativo(valorReal, temperatura);
		
		System.out.print("Para el radio: ");System.out.print(radio);System.out.print(" la temperatura medida es: ");System.out.print(temperatura);
		System.out.print("\n");
		System.out.print("el error absoluto es: ");System.out.print(errorAbsoluto);
		System.out.print("\n");
		System.out.print("el error relativo es: ");System.out.print(errorRelativo);
		System.out.print("\n");
		System.out.print("la temperatura real en este radio es:");System.out.print(valorReal);
		System.out.print("\n");
		System.out.print("\n");
	}
}
